package mapEditor.data
{
	import flash.events.EventDispatcher;
	import flash.utils.Dictionary;
	
	import mapEditor.events.MapEditorEvent;
	import mapEditor.vo.ResItemItemVO;
	import mapEditor.vo.ResItemVO;
	
	import utils.DisplayUtil;

	public class ResTemplateInfo extends EventDispatcher
	{
		private var _templateXml:XML;
		private var _res:Dictionary=new Dictionary(true);
		/**
		 *当前最大单项ID 
		 */		
		private var _maxAssetID:int;
		
		public function ResTemplateInfo()
		{
		}
		
		private static var _instance:ResTemplateInfo;
		public static function get instance():ResTemplateInfo
		{
			if(_instance == null)
			{
				_instance = new ResTemplateInfo();
			}
			return _instance;
		}
		
		public function register(xml:XML):void
		{
			dispose();
			_templateXml=xml;
			for each(var item:XML in _templateXml.res)
			{
				var resItemVO:ResItemVO=new ResItemVO(item);
				_maxAssetID=resItemVO.id>=_maxAssetID ? resItemVO.id : _maxAssetID;
				addResItem(resItemVO);
			}
			resChange();
		}
		
		public function resChange():void
		{
			dispatchEvent(new MapEditorEvent(MapEditorEvent.RES_CHANGE));
		}
		
		/**
		 *增加一个单项
		 * @param resItemVO 单项
		 * 
		 */		
		public function addResItem(resItemVO:ResItemVO):void
		{
			if(_res[resItemVO.id]!=null)
			{
				return;
			}
			_res[resItemVO.id]=resItemVO;
		}
		
		/**
		 *根据单项ID移除一个单项 
		 * @param resItemID 单项ID
		 * 
		 */		
		public function removeResItemByID(resItemID:int):void
		{
			if(_res[resItemID]==null)return;
			DisplayUtil.dispose(_res[resItemID]);
			delete _res[resItemID];
		}
		
		/**
		 *增加一个单项中的资源项
		 * @param resItemVO 单项
		 * 
		 */		
		public function addResItemItem(resItemID:int, resItemItemVO:ResItemItemVO):void
		{
			var resItemVO:ResItemVO=getResItemByID(resItemID);
			if(resItemVO)
			{
				resItemVO.addItem(resItemItemVO);
			}
		}
		
		/**
		 *根据单项ID取得一个单项 
		 * @param resItemID 单项ID
		 * @return 
		 * 
		 */		
		public function getResItemByID(resItemID:int):ResItemVO
		{
			return _res[resItemID];
		}
		
		public function dispose():void
		{
			_templateXml=null;
			DisplayUtil.dispose(_res);
		}

		public function get res():Dictionary
		{
			return _res;
		}

		/**
		 *当前最大单项ID 
		 */
		public function get maxAssetID():int
		{
			return _maxAssetID;
		}

		/**
		 * @private
		 */
		public function set maxAssetID(value:int):void
		{
			_maxAssetID = value;
		}
	}
}